package com.zhouyu;

import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.TypeExcludeFilter;
import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.core.env.ConfigurableEnvironment;

import java.util.HashMap;
import java.util.Map;

/**
 * Java没有提供任何标准的方式来加载嵌套的jar文件(即，它们本身包含在jar中的jar文件)
 * 标准三层类加载器均‌不原生支持‌内嵌包加载
 *
 * Java原生的URLClassLoader无法直接加载嵌套在JAR中的JAR（会报 ClassNotFoundException），
 * Spring Boot的Fat JAR包含所有依赖，需要特殊处理
 *
 * 传统的类加载器只能加载包路径下面的类，而将SpringBoot项目打成jar包后，
 * 我们写的类和第三方依赖被放在了BOOT-INF， Java原生类加载器无法直接加载嵌套JAR，
 * 所以会创建一个新的LaunchedURLClassLoader
 * 来加载BOOT-INF目录下的我们写的类和第三方依赖
 *
 *
 * ‌普通JAR （thin JAR）
 * 	   标准结构：仅含 META-INF/和项目类文件目录
 * 	   ‌适用场景：作为库文件供其他项目依赖
 *
 * 去各个目录下找配置文件，可以通过spring.config.name来配置文件名，默认为application
 * 这个配置通过命令行参数添加，如果添加了这个配置，默认找配置文件的规则失效
 */
@SpringBootApplication
public class MyApplication {

	public static void main(String[] args) {
		SpringApplication.run(MyApplication.class, args);

		//SpringApplication springApplication = new SpringApplication(MyApplication.class);
		//
		//////环境变量的前缀
		////springApplication.setEnvironmentPrefix("zhouyu");
		//
		////Map<String, Object> map = new HashMap<>();
		////map.put("server.port", 8088);
		////springApplication.setDefaultProperties(map);
		//////关闭启动时在控制台打印logo
		////springApplication.setBannerMode(Banner.Mode.OFF);
		//ConfigurableApplicationContext applicationContext = springApplication.run(args);
		//
		//ConfigurableEnvironment environment = applicationContext.getEnvironment();
		//
		//System.out.println(environment.getProperty("k5"));
		//System.out.println(environment.getProperty("user.dir"));

	}

	/**
	 * 这个是在扫描完了之后再解析
	 *
	 * @return
	 */
	@Bean
	public TypeExcludeFilter typeExcludeFilter() {
		return new ZhouyuTypeExcludeFilter();
	}


	//@Bean
	//public TomcatConnectorCustomizer tomcatConnectorCustomizer() {
	//	return connector -> connector.setPort(8888);
	//}

}
